#!/usr/bin/env node

/**
 * 增量更新功能测试脚本
 */

import { DatabaseManager } from '../src/database/DatabaseManager.js';
import { DataCollector, type CollectorConfig } from '../src/scrapers/DataCollector.js';
import { Component, Template } from '../src/database/models/index.js';

async function testIncrementalUpdate() {
  console.log('🧪 开始增量更新功能测试...\n');

  let dbManager: DatabaseManager | null = null;

  try {
    // 1. 初始化数据库
    console.log('📊 初始化数据库连接...');
    dbManager = new DatabaseManager();
    await dbManager.initialize();
    console.log('✅ 数据库连接成功\n');

    // 2. 检查现有数据数量
    const existingComponents = await Component.count();
    const existingTemplates = await Template.count();
    
    console.log(`📦 现有数据统计:`);
    console.log(`  - 组件数量: ${existingComponents}`);
    console.log(`  - 模板数量: ${existingTemplates}\n`);

    if (existingComponents === 0 && existingTemplates === 0) {
      console.log('⚠️  数据库中没有现有数据，建议先运行 npm run collect-data 收集一些数据后再测试增量更新功能');
      return;
    }

    // 3. 配置增量更新收集器
    const config: CollectorConfig = {
      enableAntDesign: true,
      enableAntDesignPro: false, // 只测试 Ant Design 组件
      enableProComponents: false,
      enableAntDesignCharts: false, // 先不测试 Charts，避免测试时间过长
      batchSize: 10, // 小批量测试
      maxRetries: 3,
      retryDelay: 1000,
      clearExistingData: false,
      enableIncrementalUpdate: true, // 启用增量更新
      forceUpdate: false, // 不强制更新
    };

    console.log('🔧 配置增量更新测试...');
    console.log(`  - 增量更新: ✅`);
    console.log(`  - 强制更新: ❌`);
    console.log(`  - 批处理大小: ${config.batchSize}\n`);

    // 4. 创建数据收集器并监听进度
    const collector = new DataCollector(dbManager.getRepositories(), config);
    
    let skipCount = 0;
    let updateCount = 0;
    let newCount = 0;

    collector.on('progress', (progress) => {
      // 简化进度显示，只显示重要信息
      if (progress.message?.includes('跳过')) {
        skipCount++;
        console.log(`⏩ ${progress.message}`);
      } else if (progress.message?.includes('更新')) {
        updateCount++;
        console.log(`🔄 ${progress.message}`);
      } else if (progress.message?.includes('新增')) {
        newCount++;
        console.log(`➕ ${progress.message}`);
      }
    });

    // 5. 开始收集
    console.log('🔄 开始增量更新测试...\n');
    const result = await collector.collect();

    // 6. 显示测试结果
    console.log('\n📊 增量更新测试结果:');
    console.log(`  ✅ 测试${result.success ? '成功' : '失败'}`);
    console.log(`  ⏩ 跳过数据: ${skipCount} 项`);
    console.log(`  🔄 更新数据: ${updateCount} 项`);
    console.log(`  ➕ 新增数据: ${newCount} 项`);
    console.log(`  ⏱️  总耗时: ${Math.round(result.duration / 1000)}s`);
    
    if (result.errors.length > 0) {
      console.log('\n  ⚠️  错误信息:');
      result.errors.forEach(error => console.log(`    - ${error}`));
    }

    console.log(`\n🎯 增量更新功能${skipCount > 0 ? '正常工作' : '需要检查'}!`);

    if (skipCount === 0) {
      console.log('💡 提示: 如果没有跳过的数据，可能是因为:');
      console.log('   1. 数据库中的数据已经超过一周未更新（会自动刷新）');
      console.log('   2. 抓取到的数据与现有数据有差异');
      console.log('   3. 这是第一次收集该类型的数据');
    }

  } catch (error) {
    console.error('\n❌ 测试失败:', error);
  } finally {
    if (dbManager) {
      await dbManager.close();
      console.log('\n📊 数据库连接已关闭');
    }
  }
}

// 运行测试
if (import.meta.url === `file://${process.argv[1]}`) {
  testIncrementalUpdate().catch(console.error);
}